﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Xml;
using System.Xml.Serialization;
using System.IO;
using System.Data.Objects;
using WBGModel;
using RecursosHumanos;

namespace Locadora
{
    public partial class frmMenu : Form
    {
        public static Constantes constantes { get; private set; }
        public static List<Diretiva> diretivas { get; private set; }
        public static ModelConfig config { get; private set; }

        WBGEntities bd = new WBGEntities();

        public frmMenu()
        {
            InitializeComponent();
        }

        private void frmMenu_Load(object sender, EventArgs e)
        {
            statusBarOperador.Text += " "+ ModelConfig.usuarioLogado;

            ProgressWindow pw = new ProgressWindow(3);
            pw.Text = "Iniciando o sistema...";
            pw.Show();

            pw.lblMensagem.Text = "Carregando variáveis do sistema...";
            CarregaConstantes();
            CarregaConfiguracoes();
            pw.AddProcesseds();
            
            pw.lblMensagem.Text = "Carregando permissões do usuário...";
            CarregaDiretivasUsuario();
            pw.AddProcesseds();

            pw.lblMensagem.Text = "Aplicando permissões do usuário...";
            AplicaDiretivasUsuario();
            pw.AddProcesseds();
        }

        private void CarregaConfiguracoes()
        {
            config = new WBGDal.DalConfig().Carregar();
        }

        private void AplicaDiretivasUsuario()
        {
            foreach (ToolStripItem item in cadastrosToolStripMenuItem.DropDownItems)
	        {
                try
                {
                    int dir = Convert.ToInt32(item.Tag);
                    if (dir == 0 || VerificarDiretiva(dir))
                    {
                        item.Visible = true;
                    }
                }
                catch
                {
                    item.Visible = true;
                }
	        }
        }

        public static bool VerificarDiretiva(int dir)
        {
            return diretivas.Find(x => x.idDiretiva == dir) != null;
        }

        private void CarregaDiretivasUsuario()
        {
            diretivas = bd.ProcDiretivasUsuario(1).ToList<Diretiva>();
        }

        private void CarregaConstantes()
        {
            string caminho = Application.StartupPath + @"\Constantes.xml";
            var serializer = new XmlSerializer(typeof(Constantes));
            var reader = new StreamReader(caminho);
            constantes = (Constantes)serializer.Deserialize(reader);
            reader.Close(); 
        }

        private void filmesToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //var frm = new frmFilme();
            //frm.ShowDialog();
            Util.ChamaForm(new frmFilme());
        }

        private void clientesToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //var frm = new frmCliente();
            //frm.ShowDialog();
            Util.ChamaForm(new frmCliente());
        }

        private void locaçõesToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //var frm = new frmLocacao();
            //frm.ShowDialog();
            Util.ChamaForm(new frmLocacao());
        }

        private void sairToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //var frm = new frmConfiguracao();
            //frm.ShowDialog();
            Util.ChamaForm(new frmConfiguracao());
        }

        private void sairToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void toolStripMenuItem6_Click(object sender, EventArgs e)
        {
            //var frm = new frmBairros();
            //frm.ShowDialog();
            Util.ChamaForm(new frmBairros());
        }

        private void toolStripMenuItem3_Click(object sender, EventArgs e)
        {
            //var frm = new frmCidades();
            //frm.ShowDialog();
            Util.ChamaForm(new frmCidades());
        }

        private void toolStripMenuItem4_Click(object sender, EventArgs e)
        {
            //var frm = new frmDepartamentos();
            //frm.ShowDialog();
            Util.ChamaForm(new frmDepartamentos());
        }

        private void toolStripMenuItem5_Click(object sender, EventArgs e)
        {
            //var frm = new frmMarcas();
            //frm.ShowDialog();
            Util.ChamaForm(new frmMarcas());
        }

        private void usuáriosToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //var frm = new frmUsuarios();
            //frm.ShowDialog();
            Util.ChamaForm(new frmUsuarios());
        }

        private void toolStripMenuItem1_Click(object sender, EventArgs e)
        {
            //var frm = new frmFuncionarios();
            //frm.ShowDialog();
            Util.ChamaForm(new frmFuncionarios());
        }

        private void businessInteligenceBIToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //var frm = new frmBI();
            //frm.ShowDialog();
            Util.ChamaForm(new frmBI());
        }

        private void sessõesToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //var frm = new frmSessao();
            //frm.ShowDialog();
            Util.ChamaForm(new frmSessao());
        }

        private void ingressosToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //var frm = new frmIngresso();
            //frm.ShowDialog();
            Util.ChamaForm(new frmIngresso());
        }

        private void modelosToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //var frm = new frmVeiculoModelo();
            //frm.ShowDialog();
            Util.ChamaForm(new frmVeiculoModelo());
        }

        private void perfisToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //var frm = new frmPerfil();
            //frm.ShowDialog();
            Util.ChamaForm(new frmPerfil());
        }

        private void bairrosToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Util.ChamaForm(new frmBairros3C());
        }

        private void cidadesToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Util.ChamaForm(new frmCidades3C());
        }

        private void departamentosToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Util.ChamaForm(new frmDepartamentos3C());
        }

        private void filmesToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            Util.ChamaForm(new frmFilme3C());
        }

        private void marcasToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Util.ChamaForm(new frmMarcas3C());
        }

        private void modelosToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            Util.ChamaForm(new frmVeiculoModelo3C());
        }

        private void locaçõesToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            Util.ChamaForm(new frmLocacao3C());
        }

        private void toolStripMenuItem2_Click(object sender, EventArgs e)
        {
            Util.ChamaForm(new frmFornecedores());
        }

        private void clientesToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            Util.ChamaForm(new frmCliente());
        }

        private void fornecedoresToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Util.ChamaForm(new frmFornecedores());
        }

        private void usuáriosToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            Util.ChamaForm(new frmUsuarios());
        }
    }

    [Serializable(),XmlRoot("constantes")]
    public class Constantes
    {
        [XmlArray("EstadoSiglas")]
        [XmlArrayItem("EstadoSigla",typeof(EstadoSigla))]
        public List<EstadoSigla> EstadosSiglas { get; set; } //= new List<EstadoSigla>();
        [XmlArray("FilmeGeneros")]
        [XmlArrayItem("FilmeGenero",typeof(FilmeGenero))]
        public List<FilmeGenero> FilmeGeneros { get; set; } //= new List<FilmeGenero>();
        [XmlArray("FilmeClassificacoes")]
        [XmlArrayItem("FilmeClassificacao", typeof(FilmeClassificacao))]
        public List<FilmeClassificacao> FilmeClassificacoes { get; set; } //= new List<FilmeGenero>();
        [XmlArray("EnderecoTipos")]
        [XmlArrayItem("EnderecoTipo",typeof(EnderecoTipo))]
        public List<EnderecoTipo> EnderecoTipos { get; set; } //= new List<EnderecoTipo>();
        [XmlArray("EnderecoEletronicoTipos")]
        [XmlArrayItem("EnderecoEletronicoTipo",typeof(EnderecoEletronicoTipo))]
        public List<EnderecoEletronicoTipo> EnderecoEletronicoTipos { get; set; } //= new List<EnderecoEletronicoTipo>();
        [XmlArray("TelefoneTipos")]
        [XmlArrayItem("TelefoneTipo",typeof(TelefoneTipo))]
        public List<TelefoneTipo> TelefoneTipos { get; set; } //= new List<TelefoneTipo>();
        [XmlArray("IngressoLocalCompras")]
        [XmlArrayItem("IngressoLocalCompra", typeof(IngressoLocalCompra))]
        public List<IngressoLocalCompra> IngressoLocalCompras { get; set; } //= new List<IngressoLocalCompra>();

        public Constantes()
        {
            EstadosSiglas = new List<EstadoSigla>();
            FilmeGeneros = new List<FilmeGenero>();
            FilmeClassificacoes = new List<FilmeClassificacao>();
            EnderecoTipos = new List<EnderecoTipo>();
            EnderecoEletronicoTipos = new List<EnderecoEletronicoTipo>();
            TelefoneTipos = new List<TelefoneTipo>();
            IngressoLocalCompras = new List<IngressoLocalCompra>();
        }
    }
}
